package com.jeesite.modules.storage.util;

import com.gexin.rp.sdk.base.IPushResult;
import com.gexin.rp.sdk.base.ITemplate;
import com.gexin.rp.sdk.base.impl.AppMessage;
import com.gexin.rp.sdk.base.impl.SingleMessage;
import com.gexin.rp.sdk.base.impl.Target;
import com.gexin.rp.sdk.exceptions.RequestException;
import com.gexin.rp.sdk.http.IGtPush;
import com.gexin.rp.sdk.template.LinkTemplate;
import com.gexin.rp.sdk.template.NotificationTemplate;
import com.gexin.rp.sdk.template.TransmissionTemplate;
import com.gexin.rp.sdk.template.style.Style0;
import com.jeesite.common.config.Global;
<<<<<<< HEAD
import com.jeesite.common.mapper.JsonMapper;
=======
import org.apache.commons.lang3.StringUtils;
>>>>>>> c88a136b4c055385cbe253daf39cca287214ccd6

import java.util.*;

/**
 * @Author: starmile
 * @Description:
 * @Create: 2020-02-14 17:13
 **/
public class GtPushUtil {
    private static String host = Global.getConfig("storage.gtpush.host");
    private static String appId = Global.getConfig("storage.gtpush.appId");
    private static String appKey = Global.getConfig("storage.gtpush.appKey");
    private static String masterSecret = Global.getConfig("storage.gtpush.masterSecret");
    private static String logoUrl = "http://test.h5.storage.yuxin.fit/logo.png";

<<<<<<< HEAD
    private static String url = "http://sdk.open.api.igexin.com/apiex.htm";

    public static Boolean push() {
        IGtPush push = new IGtPush(url, appKey, masterSecret);

        TransmissionTemplate template = new TransmissionTemplate();
        template.setAppId(appId);
        template.setAppkey(appKey);
        template.setTransmissionType(2);
                Map map = new HashMap();
        map.put("title","test title" + UUID.randomUUID());
        map.put("content","test content" + UUID.randomUUID());
        map.put("payload","test payload" + UUID.randomUUID());
        template.setTransmissionContent(JsonMapper.toJson(map));


        List<String> appIds = new ArrayList<String>();
        appIds.add(appId);

        // 定义"AppMessage"类型消息对象，设置消息内容模板、发送的目标App列表、是否支持离线发送、以及离线消息有效期(单位毫秒)
        AppMessage message = new AppMessage();
        message.setData(template);
        message.setAppIdList(appIds);
        message.setOffline(true);
        message.setOfflineExpireTime(1000 * 600);

        IPushResult ret = push.pushMessageToApp(message);
        return ret.getResponse().get("result").equals("ok");
    }


    //发送消息
    public static Boolean toMessage(ITemplate template){
        IGtPush push = new IGtPush(appKey, masterSecret);
        List<String> appIds = new ArrayList<String>();
        appIds.add(appId);
        // 定义"AppMessage"类型消息对象，设置消息内容模板、发送的⽬标App列表、是否⽀持离线发送、以及离线消息有效期(单位毫秒)
        AppMessage message = new AppMessage();
        message.setData(template);
        message.setAppIdList(appIds);
        message.setOffline(true);
        message.setOfflineExpireTime(1000 * 600);
        IPushResult ret = push.pushMessageToApp(message);
        return ret.getResponse().get("result").equals("ok");
    }


    public static Boolean push(String title, String message){
        IGtPush push = new IGtPush(host, appKey, masterSecret);

        Style0 style = new Style0();
        // STEP2：设置推送标题、推送内容
        style.setTitle("请输入通知栏标题"+ UUID.randomUUID());
        style.setText("请输入通知栏内容"+ UUID.randomUUID());
        style.setLogo("push.png");  // 设置推送图标
        style.setLogoUrl("http://test.h5.storage.yuxin.fit/logo.png");
        // STEP3：设置响铃、震动等推送效果
        style.setRing(true);  // 设置响铃
        style.setVibrate(true);  // 设置震动


        // STEP4：选择通知模板
//        NotificationTemplate template = new NotificationTemplate();
//        template.setAppId(appId);
//        template.setAppkey(appKey);
//        template.setStyle(style);

        NotificationTemplate template = getNotificationTemplate("请输入通知栏标题"+ UUID.randomUUID(),"请输入通知栏内容"+ UUID.randomUUID());

=======
    public static Boolean push(String title, String message, String url, Integer transmissionType, String transmissionContent){
        IGtPush push = new IGtPush(host, appKey, masterSecret);

        // STEP4：选择通知模板
        AppMessage appMessage = new AppMessage();
        if(StringUtils.isBlank(url)) {
            NotificationTemplate template = getNotificationTemplate(title, message, transmissionType, transmissionContent);
            appMessage.setData(template);
        }else {
            LinkTemplate template = linkTemplate(title, message, url);
            appMessage.setData(template);
        }
>>>>>>> c88a136b4c055385cbe253daf39cca287214ccd6

        // STEP5：定义"AppMessage"类型消息对象,设置推送消息有效期等推送参数
        List<String> appIds = new ArrayList<String>();
        appIds.add(appId);
        appMessage.setAppIdList(appIds);
        appMessage.setOffline(true);
        // 时间单位为毫秒
        appMessage.setOfflineExpireTime(1000 * 600);

        // STEP6：执行推送
        IPushResult ret = push.pushMessageToApp(appMessage);
        return ret.getResponse().get("result").equals("ok");
    }


    public static Boolean push(String clientId, String title, String message, String url, Integer transmissionType, String transmissionContent){
        IGtPush push = new IGtPush(host, appKey, masterSecret);

        SingleMessage singleMessage = new SingleMessage();
        if(StringUtils.isBlank(url)) {
            NotificationTemplate template = getNotificationTemplate(title, message, transmissionType, transmissionContent);
            singleMessage.setData(template);
        }else {
            LinkTemplate template = linkTemplate(title, message, url);
            singleMessage.setData(template);
        }
        singleMessage.setOffline(true);
        // 离线有效时间，单位为毫秒
        singleMessage.setOfflineExpireTime(24 * 3600 * 1000);
        // 可选，1为wifi，0为不限制网络环境。根据手机处于的网络情况，决定是否下发
        singleMessage.setPushNetWorkType(0);
        Target target = new Target();
        target.setAppId(appId);
        target.setClientId(clientId);
        target.setAlias("");
        IPushResult ret = null;
        try {
            ret = push.pushMessageToSingle(singleMessage, target);
        } catch (RequestException e) {
            e.printStackTrace();
            ret = push.pushMessageToSingle(singleMessage, target, e.getRequestId());
        }
        if (ret != null) {
            System.out.println(ret.getResponse().toString());
        } else {
            System.out.println("服务器响应异常");
        }
        return ret.getResponse().get("result").equals("ok");
    }

    public static NotificationTemplate getNotificationTemplate(String title, String message, Integer transmissionType, String transmissionContent) {
        NotificationTemplate template = new NotificationTemplate();
        // 设置APPID与APPKEY
        template.setAppId(appId);
        template.setAppkey(appKey);

        Style0 style = new Style0();
        // 设置通知栏标题与内容
        style.setTitle(title);
        style.setText(message);
        // 配置通知栏图标
        // style.setLogo("icon.png");
        // 配置通知栏网络图标
        style.setLogoUrl(logoUrl);
        // 设置通知是否响铃，震动，或者可清除
        style.setRing(true);
        style.setVibrate(true);
        style.setClearable(true);
<<<<<<< HEAD
//        style.setChannel("通知渠道id");
//        style.setChannelName("通知渠道名称");
//        style.setChannelLevel(3); //设置通知渠道重要性
        template.setStyle(style);

        template.setTransmissionType(1);  // 透传消息接受方式设置，1：立即启动APP，2：客户端收到消息后需要自行处理
        template.setTransmissionContent("请输入您要透传的内容");
//        template.setAPNInfo();
=======
        style.setChannel("通知渠道id");
        style.setChannelName("通知渠道名称");
        //设置通知渠道重要性
        style.setChannelLevel(3);
        template.setStyle(style);
        // 透传消息接受方式设置，1：立即启动APP，2：客户端收到消息后需要自行处理
        template.setTransmissionType(transmissionType);
        template.setTransmissionContent(transmissionContent);
        return template;
    }


    public static LinkTemplate linkTemplate(String title, String message, String url) {
        LinkTemplate template = new LinkTemplate();
        template.setAppId(appId);
        template.setAppkey(appKey);

        Style0 style = new Style0();
        // 设置通知栏标题与内容
        style.setTitle(title);
        style.setText(message);
        // 配置通知栏图标
        //style.setLogo("icon.png");
        // 配置通知栏网络图标
        style.setLogoUrl(logoUrl);
        // 设置通知是否响铃，震动，或者可清除
        style.setRing(true);
        style.setVibrate(true);
        style.setClearable(true);
        style.setChannel("自定义channel");
        style.setChannelName("自定义channelName");
        style.setChannelLevel(3);
        template.setStyle(style);

        // 设置打开的网址地址
        template.setUrl(url);

        // 设置定时展示时间，安卓机型可用
        // template.setDuration("2019-08-16 11:40:00", "2019-08-16 12:24:00");

        // 消息覆盖
        // template.setNotifyid(123); // 在消息推送的时候设置自定义的notifyid。如果需要覆盖此条消息，则下次使用相同的notifyid发一条新的消息。客户端sdk会根据notifyid进行覆盖。
>>>>>>> c88a136b4c055385cbe253daf39cca287214ccd6
        return template;
    }
}
